home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / EGL_PointC215941872009.psc / PointCloud V1.1 / clsDIB.cls < prev    next >
Text File  |  2009-07-29  |  5KB  |  176 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsDIB"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Private Const DIB_RGB_COLORS As Long = 0
  17.  
  18. Private Type BITMAPINFOHEADER
  19.     biSize          As Long
  20.     biWidth         As Long
  21.     biHeight        As Long
  22.     biPlanes        As Integer
  23.     biBitCount      As Integer
  24.     biCompression   As Long
  25.     biSizeImage     As Long
  26.     biXPelsPerMeter As Long
  27.     biYPelsPerMeter As Long
  28.     biClrUsed       As Long
  29.     biClrImportant  As Long
  30. End Type
  31.  
  32. Private Type BITMAPINFO
  33.     bmiHeader       As BITMAPINFOHEADER
  34. End Type
  35.  
  36. Private Type SAFEARRAYBOUND
  37.     cElements       As Long
  38.     lLbound         As Long
  39. End Type
  40.  
  41. Private Type SAFEARRAY2D
  42.     cDims           As Integer
  43.     fFeatures       As Integer
  44.     cbElements      As Long
  45.     cLocks          As Long
  46.     pvData          As Long
  47.     Bounds(1)       As SAFEARRAYBOUND
  48. End Type
  49.  
  50. Private Type POINTAPI
  51.     X               As Long
  52.     Y               As Long
  53. End Type
  54.  
  55. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
  56. Private Declare Function CreateDIBSection Lib "gdi32" (ByVal hDC As Long, pBitmapInfo As BITMAPINFO, ByVal un As Long, lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long
  57. Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
  58. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  59. Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
  60. Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
  61. Private Declare Function StretchBlt Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
  62. Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hDC As Long, ByVal hStretchMode As Long) As Long
  63. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  64. Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (dest As Any, ByVal numBytes As Long)
  65. Private Declare Function VarPtrArray Lib "MSVBVM60.dll" Alias "VarPtr" (Ptr() As Any) As Long
  66.  
  67. Public hDC       As Long
  68. Public hDIB      As Long
  69. Public Width     As Long
  70. Public Height    As Long
  71. Private m_SizeImage As Long
  72. Private m_hOldDIB   As Long
  73. Private m_lpBits    As Long
  74. Private m_Data()    As Long
  75. Private sa          As SAFEARRAY2D
  76. Private m_hBrush    As Long
  77.  
  78. Public Sub Create(NewWidth As Long, NewHeight As Long, Optional Orientation As Boolean = False)
  79.     
  80.     On Error GoTo ErrorCreate
  81.     
  82.     Dim bi  As BITMAPINFO
  83.  
  84.     Width = NewWidth
  85.     Height = NewHeight
  86.     m_SizeImage = NewWidth * NewHeight * 4
  87.     
  88.     With bi.bmiHeader
  89.         .biSize = Len(bi)
  90.         .biWidth = Width
  91.         .biHeight = IIf(Orientation, Height, -Height)
  92.         .biPlanes = 1
  93.         .biBitCount = 32
  94.         .biSizeImage = m_SizeImage
  95.     End With
  96.     
  97.     hDC = CreateCompatibleDC(0)
  98.     If (hDC <> 0) Then
  99.         hDIB = CreateDIBSection(hDC, bi, DIB_RGB_COLORS, m_lpBits, 0, 0)
  100.         If (hDIB <> 0) Then
  101.             m_hOldDIB = SelectObject(hDC, hDIB)
  102.             With sa
  103.                 .cbElements = 4
  104.                 .cDims = 2
  105.                 .Bounds(0).lLbound = 0
  106.                 .Bounds(0).cElements = Height
  107.                 .Bounds(1).lLbound = 0
  108.                 .Bounds(1).cElements = Width
  109.                 .pvData = m_lpBits
  110.             End With
  111.             Call CopyMemory(ByVal VarPtrArray(m_Data()), VarPtr(sa), 4)
  112.         Else
  113.             Call Delete
  114.         End If
  115.     End If
  116.     Exit Sub
  117.     
  118. ErrorCreate:
  119.     MsgBox "Error: clsDIB > Create"
  120. End Sub
  121.  
  122. Public Sub Clear()
  123.     
  124.     On Error GoTo ErrorClear
  125.     
  126.     Call ZeroMemory(m_Data(0, 0), m_SizeImage)
  127.     Exit Sub
  128.  
  129. ErrorClear:
  130.     MsgBox "Error: clsDIB > Clear"
  131. End Sub
  132.  
  133. Public Sub Delete()
  134.     
  135.     On Error GoTo ErrorDelete
  136.     
  137.     If (hDC <> 0) Then
  138.         If (hDIB <> 0) Then
  139.             Call CopyMemory(ByVal VarPtrArray(m_Data()), 0&, 4)
  140.             Call SelectObject(hDC, m_hOldDIB)
  141.             Call DeleteObject(hDIB)
  142.         End If
  143.         Call DeleteDC(hDC)
  144.     End If
  145.     hDC = 0
  146.     hDIB = 0
  147.     m_hOldDIB = 0
  148.     m_lpBits = 0
  149.     Exit Sub
  150.     
  151. ErrorDelete:
  152.     MsgBox "Error: clsDIB > Delete"
  153. End Sub
  154.  
  155. Public Sub Paint(ByVal hDestDC As Long)
  156.     BitBlt hDestDC, 0, 0, Width, Height, hDC, 0, 0, vbSrcCopy
  157. End Sub
  158.  
  159. Public Function GetPixel(X As Single, Y As Single) As Long
  160.     On Error Resume Next
  161.     GetPixel = m_Data(X, Y)
  162. End Function
  163.  
  164. Public Sub SetPixel(X As Single, Y As Single, lColor As Long)
  165.     m_Data(X, Y) = lColor
  166. End Sub
  167.  
  168. Private Sub Class_Initialize()
  169.     hDIB = 0
  170. End Sub
  171.  
  172. Private Sub Class_Terminate()
  173.     Call Delete
  174. End Sub
  175.  
  176.